var runtime.work
295 uses
runtime (current package)
metrics.go#L748: a.cpuStats = work.cpuStats
mgc.go#L196: work.startSema = 1
mgc.go#L197: work.markDoneSema = 1
mgc.go#L198: work.spanSPMCs.list.init(unsafe.Offsetof(spanSPMC{}.allnode))
mgc.go#L199: lockInit(&work.sweepWaiters.lock, lockRankSweepWaiters)
mgc.go#L200: lockInit(&work.assistQueue.lock, lockRankAssistQueue)
mgc.go#L201: lockInit(&work.strongFromWeak.lock, lockRankStrongFromWeakQueue)
mgc.go#L202: lockInit(&work.wbufSpans.lock, lockRankWbufSpans)
mgc.go#L203: lockInit(&work.spanSPMCs.lock, lockRankSpanSPMCs)
mgc.go#L325: var work workType
mgc.go#L549: n := work.cycles.Load()
mgc.go#L564: for work.cycles.Load() == n+1 && sweepone() != ^uintptr(0) {
mgc.go#L579: for work.cycles.Load() == n+1 && !isSweepDone() {
mgc.go#L587: cycle := work.cycles.Load()
mgc.go#L600: work.goroutineLeak.pending.Store(true)
mgc.go#L638: for work.goroutineLeak.pending.Load() {
mgc.go#L648: lock(&work.sweepWaiters.lock)
mgc.go#L649: nMarks := work.cycles.Load()
mgc.go#L656: unlock(&work.sweepWaiters.lock)
mgc.go#L662: work.sweepWaiters.list.push(getg())
mgc.go#L663: goparkunlock(&work.sweepWaiters.lock, waitReasonWaitForGCCycle, traceBlockUntilGCEnds, 1)
mgc.go#L722: return int32(t.n-work.cycles.Load()) > 0
mgc.go#L772: semacquire(&work.startSema)
mgc.go#L775: semrelease(&work.startSema)
mgc.go#L796: work.userForced = trigger.kind == gcTriggerCycle
mgc.go#L821: work.stwprocs, work.maxprocs = gomaxprocs, gomaxprocs
mgc.go#L822: if work.stwprocs > numCPUStartup {
mgc.go#L825: work.stwprocs = numCPUStartup
mgc.go#L827: work.heap0 = gcController.heapLive.Load()
mgc.go#L828: work.pauseNS = 0
mgc.go#L829: work.mode = mode
mgc.go#L832: work.tSweepTerm = now
mgc.go#L839: work.cpuStats.accumulateGCPauseTime(stw.stoppingCPUTime, 1)
mgc.go#L877: work.cycles.Add(1)
mgc.go#L894: if work.goroutineLeak.pending.Load() {
mgc.go#L895: work.goroutineLeak.enabled = true
mgc.go#L896: work.goroutineLeak.pending.Store(false)
mgc.go#L944: work.cpuStats.accumulateGCPauseTime(nanotime()-stw.finishedStopping, work.maxprocs)
mgc.go#L949: work.pauseNS += now - stw.startedStopping
mgc.go#L950: work.tMark = now
mgc.go#L969: semrelease(&work.startSema)
mgc.go#L1018: semacquire(&work.markDoneSema)
mgc.go#L1028: semrelease(&work.markDoneSema)
mgc.go#L1038: work.strongFromWeak.block = true
mgc.go#L1080: work.tMarkTerm = now
mgc.go#L1091: work.cpuStats.accumulateGCPauseTime(stw.stoppingCPUTime, 1)
mgc.go#L1115: if restart || (work.goroutineLeak.enabled && !work.goroutineLeak.done) {
mgc.go#L1124: work.goroutineLeak.done = findGoroutineLeaks()
mgc.go#L1130: work.cpuStats.accumulateGCPauseTime(nanotime()-stw.finishedStopping, work.maxprocs)
mgc.go#L1134: work.pauseNS += now - stw.startedStopping
mgc.go#L1155: work.strongFromWeak.block = false
mgc.go#L1161: semrelease(&work.markDoneSema)
mgc.go#L1170: gcController.endCycle(now, int(gomaxprocs), work.userForced)
mgc.go#L1223: oldRootJobs := work.markrootJobs.Load()
mgc.go#L1229: var vIndex, ivIndex int = work.nMaybeRunnableStackRoots, work.nStackRoots
mgc.go#L1232: if work.stackRoots[vIndex].isMaybeRunnable() {
mgc.go#L1237: if gp := work.stackRoots[ivIndex]; gp.isMaybeRunnable() {
mgc.go#L1238: work.stackRoots[ivIndex] = work.stackRoots[vIndex]
mgc.go#L1239: work.stackRoots[vIndex] = gp
mgc.go#L1246: newRootJobs := work.baseStacks + uint32(vIndex)
mgc.go#L1248: work.nMaybeRunnableStackRoots = vIndex
mgc.go#L1249: work.markrootJobs.Store(newRootJobs)
mgc.go#L1302: if work.nMaybeRunnableStackRoots == work.nStackRoots {
mgc.go#L1314: work.goroutineLeak.count = work.nStackRoots - work.nMaybeRunnableStackRoots
mgc.go#L1316: for i := work.nMaybeRunnableStackRoots; i < work.nStackRoots; i++ {
mgc.go#L1317: gp := work.stackRoots[i]
mgc.go#L1337: work.markrootJobs.Add(int32(work.nStackRoots - work.nMaybeRunnableStackRoots))
mgc.go#L1338: work.nMaybeRunnableStackRoots = work.nStackRoots
mgc.go#L1348: work.heap1 = gcController.heapLive.Load()
mgc.go#L1378: work.heap2 = work.bytesMarked
mgc.go#L1388: stwSwept = gcSweep(work.mode)
mgc.go#L1418: work.pauseNS += now - stw.startedStopping
mgc.go#L1419: work.tEnd = now
mgc.go#L1422: memstats.pause_ns[memstats.numgc%uint32(len(memstats.pause_ns))] = uint64(work.pauseNS)
mgc.go#L1424: memstats.pause_total_ns += uint64(work.pauseNS)
mgc.go#L1434: work.cpuStats.accumulateGCPauseTime(now-stw.finishedStopping, work.maxprocs)
mgc.go#L1435: work.cpuStats.accumulate(now, true)
mgc.go#L1439: memstats.gc_cpu_fraction = float64(work.cpuStats.GCTotalTime-work.cpuStats.GCIdleTime) / float64(work.cpuStats.TotalTime)
mgc.go#L1451: if work.userForced {
mgc.go#L1456: lock(&work.sweepWaiters.lock)
mgc.go#L1458: injectglist(&work.sweepWaiters.list)
mgc.go#L1459: unlock(&work.sweepWaiters.lock)
mgc.go#L1494: if work.goroutineLeak.enabled {
mgc.go#L1502: work.goroutineLeak.enabled = false
mgc.go#L1503: goroutineLeakDone = work.goroutineLeak.done
mgc.go#L1504: work.goroutineLeak.done = false
mgc.go#L1578: " @", string(itoaDiv(sbuf[:], uint64(work.tSweepTerm-runtimeInitTime)/1e6, 3)), "s ",
mgc.go#L1584: prev := work.tSweepTerm
mgc.go#L1585: for i, ns := range []int64{work.tMark, work.tMarkTerm, work.tEnd} {
mgc.go#L1594: int64(work.stwprocs) * (work.tMark - work.tSweepTerm),
mgc.go#L1598: int64(work.stwprocs) * (work.tEnd - work.tMarkTerm),
mgc.go#L1609: work.heap0>>20, "->", work.heap1>>20, "->", work.heap2>>20, " MB, ",
mgc.go#L1613: work.maxprocs, " P")
mgc.go#L1614: if work.userForced {
mgc.go#L1725: work.nproc = ^uint32(0)
mgc.go#L1726: work.nwait = ^uint32(0)
mgc.go#L1928: return work.nwait == work.nproc && !gcMarkWorkAvailable()
mgc.go#L1934: decnwait := atomic.Xadd(&work.nwait, -1)
mgc.go#L1935: if decnwait == work.nproc {
mgc.go#L1936: println("runtime: work.nwait=", decnwait, "work.nproc=", work.nproc)
mgc.go#L1945: incnwait := atomic.Xadd(&work.nwait, +1)
mgc.go#L1946: if incnwait > work.nproc {
mgc.go#L1947: println("runtime: work.nwait=", incnwait, "work.nproc=", work.nproc)
mgc.go#L1950: return incnwait == work.nproc && !gcMarkWorkAvailable()
mgc.go#L1960: work.tstart = startTime
mgc.go#L1963: if next, jobs := work.markrootNext.Load(), work.markrootJobs.Load(); work.full != 0 || next < jobs {
mgc.go#L1964: print("runtime: full=", hex(work.full), " next=", next, " jobs=", jobs, " nDataRoots=", work.nDataRoots, " nBSSRoots=", work.nBSSRoots, " nSpanRoots=", work.nSpanRoots, " nStackRoots=", work.nStackRoots, "\n")
mgc.go#L1977: work.stackRoots = nil
mgc.go#L2038: gcController.resetLive(work.bytesMarked)
mgc.go#L2131: work.bytesMarked = 0
mgc.go#L2132: work.initialHeapLive = gcController.heapLive.Load()
mgcmark.go#L117: work.nDataRoots = 0
mgcmark.go#L118: work.nBSSRoots = 0
mgcmark.go#L123: if nDataRoots > work.nDataRoots {
mgcmark.go#L124: work.nDataRoots = nDataRoots
mgcmark.go#L128: if nBSSRoots > work.nBSSRoots {
mgcmark.go#L129: work.nBSSRoots = nBSSRoots
mgcmark.go#L146: work.nSpanRoots = len(mheap_.markArenas) * (pagesPerArena / pagesPerSpanRoot)
mgcmark.go#L154: if work.goroutineLeak.enabled {
mgcmark.go#L157: work.stackRoots, work.nMaybeRunnableStackRoots = allGsSnapshotSortedForGC()
mgcmark.go#L160: work.stackRoots = allGsSnapshot()
mgcmark.go#L161: work.nMaybeRunnableStackRoots = len(work.stackRoots)
mgcmark.go#L164: work.nStackRoots = len(work.stackRoots)
mgcmark.go#L166: work.markrootNext.Store(0)
mgcmark.go#L167: work.markrootJobs.Store(uint32(fixedRootCount + work.nDataRoots + work.nBSSRoots + work.nSpanRoots + work.nMaybeRunnableStackRoots))
mgcmark.go#L170: work.baseData = uint32(fixedRootCount)
mgcmark.go#L171: work.baseBSS = work.baseData + uint32(work.nDataRoots)
mgcmark.go#L172: work.baseSpans = work.baseBSS + uint32(work.nBSSRoots)
mgcmark.go#L173: work.baseStacks = work.baseSpans + uint32(work.nSpanRoots)
mgcmark.go#L174: work.baseEnd = work.baseStacks + uint32(work.nStackRoots)
mgcmark.go#L180: if next, jobs := work.markrootNext.Load(), work.markrootJobs.Load(); next < jobs {
mgcmark.go#L192: if i >= work.nStackRoots {
mgcmark.go#L226: case work.baseData <= i && i < work.baseBSS:
mgcmark.go#L229: workDone += markrootBlock(datap.data, datap.edata-datap.data, datap.gcdatamask.bytedata, gcw, int(i-work.baseData))
mgcmark.go#L232: case work.baseBSS <= i && i < work.baseSpans:
mgcmark.go#L235: workDone += markrootBlock(datap.bss, datap.ebss-datap.bss, datap.gcbssmask.bytedata, gcw, int(i-work.baseBSS))
mgcmark.go#L257: case work.baseSpans <= i && i < work.baseStacks:
mgcmark.go#L259: markrootSpans(gcw, int(i-work.baseSpans))
mgcmark.go#L264: if i < work.baseStacks || work.baseEnd <= i {
mgcmark.go#L266: print("runtime: markroot index ", i, " not in stack roots range [", work.baseStacks, ", ", work.baseEnd, ")\n")
mgcmark.go#L269: gp := work.stackRoots[i-work.baseStacks]
mgcmark.go#L275: gp.waitsince = work.tstart
mgcmark.go#L785: lock(&work.assistQueue.lock)
mgcmark.go#L786: list := work.assistQueue.q.popList()
mgcmark.go#L788: unlock(&work.assistQueue.lock)
mgcmark.go#L796: lock(&work.assistQueue.lock)
mgcmark.go#L801: unlock(&work.assistQueue.lock)
mgcmark.go#L806: oldList := work.assistQueue.q
mgcmark.go#L807: work.assistQueue.q.pushBack(gp)
mgcmark.go#L814: work.assistQueue.q = oldList
mgcmark.go#L818: unlock(&work.assistQueue.lock)
mgcmark.go#L822: goparkunlock(&work.assistQueue.lock, waitReasonGCAssistWait, traceBlockGCMarkAssist, 2)
mgcmark.go#L837: if work.assistQueue.q.empty() {
mgcmark.go#L849: lock(&work.assistQueue.lock)
mgcmark.go#L850: for !work.assistQueue.q.empty() && scanBytes > 0 {
mgcmark.go#L851: gp := work.assistQueue.q.pop()
mgcmark.go#L873: work.assistQueue.q.pushBack(gp)
mgcmark.go#L884: unlock(&work.assistQueue.lock)
mgcmark.go#L1192: if !work.goroutineLeak.enabled {
mgcmark.go#L1194: job := work.markrootNext.Add(1) - 1
mgcmark.go#L1195: return job, job < work.markrootJobs.Load()
mgcmark.go#L1199: for next, jobs := work.markrootNext.Load(), work.markrootJobs.Load(); next < jobs; next = work.markrootNext.Load() {
mgcmark.go#L1201: if work.markrootNext.CompareAndSwap(next, next+1) {
mgcmark.go#L1267: if work.markrootNext.Load() < work.markrootJobs.Load() {
mgcmark.go#L1306: if work.full == 0 {
mgcmark.go#L1406: if work.full == 0 {
mgcmark.go#L1424: if work.markrootNext.Load() < work.markrootJobs.Load() {
mgcmark_greenteagc.go#L305: if !work.spanqMask.read(uint32(gcw.id)) {
mgcmark_greenteagc.go#L306: work.spanqMask.set(gcw.id)
mgcmark_greenteagc.go#L332: if work.spanqMask.read(uint32(w.id)) {
mgcmark_greenteagc.go#L333: work.spanqMask.clear(w.id)
mgcmark_greenteagc.go#L636: lock(&work.spanSPMCs.lock)
mgcmark_greenteagc.go#L640: work.spanSPMCs.list.remove(unsafe.Pointer(r))
mgcmark_greenteagc.go#L649: unlock(&work.spanSPMCs.lock)
mgcmark_greenteagc.go#L709: lock(&work.spanSPMCs.lock)
mgcmark_greenteagc.go#L711: work.spanSPMCs.list.push(unsafe.Pointer(r))
mgcmark_greenteagc.go#L712: unlock(&work.spanSPMCs.lock)
mgcmark_greenteagc.go#L775: lock(&work.spanSPMCs.lock)
mgcmark_greenteagc.go#L776: if gcphase != _GCoff || work.spanSPMCs.list.empty() {
mgcmark_greenteagc.go#L777: unlock(&work.spanSPMCs.lock)
mgcmark_greenteagc.go#L780: r := (*spanSPMC)(work.spanSPMCs.list.head())
mgcmark_greenteagc.go#L785: work.spanSPMCs.list.remove(unsafe.Pointer(r))
mgcmark_greenteagc.go#L791: unlock(&work.spanSPMCs.lock)
mgcmark_greenteagc.go#L801: if !work.spanqMask.read(enum.position()) {
mgcmark_greenteagc.go#L818: work.spanqMask.clear(int32(enum.position()))
mgcmark_greenteagc.go#L1166: if !work.full.empty() {
mgcmark_greenteagc.go#L1169: if work.markrootNext.Load() < work.markrootJobs.Load() {
mgcmark_greenteagc.go#L1172: if work.spanqMask.any() {
mgcpacer.go#L463: work.initialHeapLive>>20, "->",
mgcpacer.go#L1364: gcWaitOnMark(work.cycles.Load())
mgcwork.go#L164: lockWithRankMayAcquire(&work.wbufSpans.lock, lockRankWbufSpans)
mgcwork.go#L335: work.spanqMask.set(w.id)
mgcwork.go#L343: atomic.Xadd64(&work.bytesMarked, int64(w.bytesMarked))
mgcwork.go#L426: if work.empty != 0 {
mgcwork.go#L427: b = (*workbuf)(work.empty.pop())
mgcwork.go#L434: lockWithRankMayAcquire(&work.wbufSpans.lock, lockRankWbufSpans)
mgcwork.go#L439: if work.wbufSpans.free.first != nil {
mgcwork.go#L440: lock(&work.wbufSpans.lock)
mgcwork.go#L441: s = work.wbufSpans.free.first
mgcwork.go#L443: work.wbufSpans.free.remove(s)
mgcwork.go#L444: work.wbufSpans.busy.insert(s)
mgcwork.go#L446: unlock(&work.wbufSpans.lock)
mgcwork.go#L456: lock(&work.wbufSpans.lock)
mgcwork.go#L457: work.wbufSpans.busy.insert(s)
mgcwork.go#L458: unlock(&work.wbufSpans.lock)
mgcwork.go#L482: work.empty.push(&b.node)
mgcwork.go#L492: work.full.push(&b.node)
mgcwork.go#L500: b := (*workbuf)(work.full.pop())
mgcwork.go#L526: lock(&work.wbufSpans.lock)
mgcwork.go#L527: if work.full != 0 {
mgcwork.go#L533: work.empty = 0
mgcwork.go#L534: work.wbufSpans.free.takeAll(&work.wbufSpans.busy)
mgcwork.go#L535: unlock(&work.wbufSpans.lock)
mgcwork.go#L542: lock(&work.wbufSpans.lock)
mgcwork.go#L543: if gcphase != _GCoff || work.wbufSpans.free.isEmpty() {
mgcwork.go#L544: unlock(&work.wbufSpans.lock)
mgcwork.go#L550: span := work.wbufSpans.free.first
mgcwork.go#L554: work.wbufSpans.free.remove(span)
mgcwork.go#L558: more := !work.wbufSpans.free.isEmpty()
mgcwork.go#L559: unlock(&work.wbufSpans.lock)
mheap.go#L2423: if work.strongFromWeak.block {
mheap.go#L2485: for work.strongFromWeak.block {
mheap.go#L2486: lock(&work.strongFromWeak.lock)
mheap.go#L2490: work.strongFromWeak.q.pushBack(getg())
mheap.go#L2493: goparkunlock(&work.strongFromWeak.lock, waitReasonGCWeakToStrongWait, traceBlockGCWeakToStrongWait, 2)
mheap.go#L2509: lock(&work.strongFromWeak.lock)
mheap.go#L2510: list := work.strongFromWeak.q.popList()
mheap.go#L2512: unlock(&work.strongFromWeak.lock)
mprof.go#L1323: return work.goroutineLeak.count, false
mprof.go#L1329: n = work.goroutineLeak.count
proc.go#L5721: return work.goroutineLeak.count
proc.go#L6068: work.spanqMask = work.spanqMask.resize(nprocs)
proc.go#L6133: work.spanqMask = work.spanqMask.resize(nprocs)
 |
The pages are generated with Golds v0.8.4. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |